package main

import (
	"fmt"
	"net"
	"go_code/projectExec2/common/message"
	"go_code/projectExec2/server/process"
	"go_code/projectExec2/server/utils"
	"io"
)

type Processor struct{
	Conn net.Conn
}

//编写一个ServerProcessMes函数
//功能：根据客户端发送消息的种类不同，决定调用哪个函数来处理
func (this *Processor)ServerProcessMes(mes *message.Message) (err error){
	//测试能不能收到客户端所发送的消息
	//fmt.Println("群聊消息: ",mes)

	switch mes.Type{
		case message.LoginMesType:
			//处理登录的逻辑
			userprocessor := &process.UserProcess{
				Conn : this.Conn,
			}	
			err := userprocessor.ServerProcessLogin(mes)
			if err != nil{
				fmt.Println("服务器处理异常！err:",err)
			}

		case message.RegisterMesType:
			userprocessor := &process.UserProcess{
				Conn : this.Conn,
			}
			//处理注册
			err := userprocessor.ServerProcessRegister(mes)
			if err != nil{
				fmt.Println("Processor Register Error : ",err)
			}

		case message.SmsMesType :
			//创建一个smsprocess实例完成转发群聊消息
			smsProcess := &process.SmsProcess{}
			smsProcess.SendGroupMes(mes)
		default:
			fmt.Println("消息类型不存在，无法处理！")
	}
	return
}

func (this *Processor) Process() (err error){
	//循环读取客户端发送的消息
	for {
		//创建一个Transfer实例去完成读包任务
		tf := &utils.Transfer{
			Conn : this.Conn,
		}
		mes,err := tf.ReadPkg()
		if err != nil{
			if err == io.EOF{
				fmt.Println("客户端已退出，服务端终止对其服务...")
				return err
			}else{
				fmt.Println("server readPkg err:",err)
				return err
			}
		}
		//fmt.Println("mes :",mes)
		err = this.ServerProcessMes(&mes)
		if err != nil{
			return err
		}
	}
}